home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1994 November: Tool Chest / Dev.CD Nov 94.toast / Sample Code / RAMDisk sample / DriverGestaltHandler.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-31  |  2.7 KB  |  105 lines  |  [TEXT/R*ch]

  1. /*                                    DriverGestaltHandler.c                            */
  2. /*
  3.  * DriverGestaltHandler.c
  4.  * Copyright © 1994 Apple Computer Inc. All rights reserved.
  5.  *
  6.  * DriverGestaltHandler is called for PBStatus 43 (driver gestalt) calls. This
  7.  * particular implementation is a semi-temporary hack that shows how this will
  8.  * be implemented.
  9.  */
  10. #include <Errors.h>
  11. #include <Devices.h>
  12. #include <MixedMode.h>
  13. #include <Memory.h>
  14. #include <Traps.h>
  15. #include <Files.h>
  16. #include <Devices.h>
  17. #include "NullDriver.h"
  18.  
  19. #ifndef FALSE
  20. #define FALSE    0
  21. #define TRUE    1
  22. #endif
  23.  
  24. /*
  25.  * Defined Driver Gestalt selectors.
  26.  */
  27. enum {
  28.     kDriverGestaltSync            = 'sync',    /* TRUE if driver is only synchronous    */
  29.     kDriverGestaltBoot            = 'boot',    /* Drive value for PRAM (longword)        */
  30.     kDriverGestaltDeviceType    = 'devt',    /* Device type                            */
  31.     kDriverGestaltInterface        = 'intf',    /* Underlying interface driver uses        */
  32.     kDriverGestaltVersion        = 'vers',    /* Driver 'vers' resource value            */
  33.     kDriverGestaltStorage        = 'lpwr'    /* Does driver support power saving?    */
  34. };
  35.  
  36.     /* Currently defined values for device type:            */
  37.     /*    'disk'    - standard r/w disk drive                     */
  38.     /*    'tape'    - tape drive                                 */
  39.     /*    'prnt'    - printer                                     */
  40.     /*    'proc'    - processor                                 */
  41.     /*    'worm'    - write-once                                */
  42.     /*    'cdrm'    - cd-rom drive                                */
  43.     /*    'flop'    - floppy disk drive                            */
  44.     /*    'scan'    - scanner                                    */
  45.  
  46.  
  47.     /* Currently defined values for interface type            */
  48.     /*    'scsi'                                                */
  49.     /*    'pcmc'    - pcmcia                                    */
  50.     /*    'ide '                                                */
  51.     /*    'pci '                                                */
  52.     /*    'nbus'    - nubus card                                */
  53.  
  54. /*
  55.  * Status parameter block for drvrGestalt calls
  56.  */
  57. #if defined(powerc) || defined (__powerc)
  58. #pragma options align=mac68k
  59. #endif
  60. struct DriverGestaltParam {
  61.     ParamBlockHeader 
  62.     short                ioCRefNum;                /* refNum for I/O operation            */
  63.     short                csCode;                    /*    == DriverGestaltCode            */
  64.     OSType                driverGestaltSelector;    /* 'sync', 'vers', etc.                */
  65.     unsigned long        driverGestaltResponse;    /* Somesort of longword                */
  66. };
  67. #if defined(powerc) || defined(__powerc)
  68. #pragma options align=reset
  69. #endif
  70. typedef struct DriverGestaltParam DriverGestaltParam;
  71.  
  72. /*
  73.  * Called on PBStatus, csCode = 43
  74.  */
  75. OSErr
  76. DriverGestaltHandler(
  77.         register CntrlParam        *pb
  78.     )
  79. {
  80.         OSErr                    status;
  81. #define PB    (*((DriverGestaltParam *) pb))
  82.  
  83.         PB.driverGestaltResponse = 0;
  84.         status = noErr;
  85.         switch (PB.driverGestaltSelector) {
  86.         case kDriverGestaltSync:
  87.             PB.driverGestaltResponse = FALSE;
  88.             break;
  89.         case kDriverGestaltVersion:
  90.             PB.driverGestaltResponse = 0;
  91.             break;
  92.         case kDriverGestaltDeviceType:
  93.             PB.driverGestaltResponse = 'null';
  94.             break;
  95.         case kDriverGestaltInterface:
  96.             PB.driverGestaltResponse = 'null';
  97.             break;
  98.         default:
  99.             status = statusErr;            
  100.             break;
  101.         }
  102.         return (status);
  103. #undef PB
  104. }
  105.